package com.lh.music.dao;

import android.content.Context;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.UpdateBuilder;
import com.lh.music.entity.Song;
import com.lh.music.orm.OrmHelper;

import java.sql.SQLException;
import java.util.List;

/**
 * Created by a on 2016/12/22.
 */

public class SongDao {
    private Dao<Song,Integer> dao;
    public SongDao(Context context){
        OrmHelper helper=OrmHelper.getInstance(context);
        try {
            dao=helper.getDao(Song.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //将一个集合存到音乐表中  如果表中有存在的歌，则不会保存第二次
    public void addSongList(List<Song> list){
        for (int i=0;i<list.size();i++){
            addSong(list.get(i));
        }
    }
    //将歌曲添加到音乐表中
    public int addSong(Song song){
        int i=0;
        try {
            List<Song> list=dao.queryForEq("title",song.getTitle());
            if (list.size()==0){
                i=dao.create(song);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return  i;
    }
    //查找所有的歌曲
    public List<Song> findAllSong(){
        try {
            return dao.queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return  null;
    }
    //查找音乐表中我最喜欢的所有的歌曲
    public List<Song> findAllFavorateSong(){
        try {
            return dao.queryForEq("isFavorate",true);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return  null;
    }
    //将对应的歌曲的isFavorate设置为true
    public boolean updateSongIsFavorate(Song song) throws SQLException {
        boolean res=false;
        //先看该歌曲是否是我喜欢的歌曲
        QueryBuilder queryBuilder=dao.queryBuilder();
        queryBuilder.where().eq("title",song.getTitle());
        List<Song> list=queryBuilder.query();
        if (list.get(0).isFavorate()){
            return  res;
        }else {
            UpdateBuilder updateBuilder=dao.updateBuilder();
            updateBuilder.where().eq("title",song.getTitle());
            updateBuilder.updateColumnValue("isFavorate",true);
            int i=updateBuilder.update();
            if (i>0){
                res=true;
            }
        }
        return  res;
    }
    //将对应的歌曲isfavorate设置为false
    public boolean updateSongNotIsFavorate(Song song) throws SQLException {
        boolean res = false;
        UpdateBuilder updateBuilder = dao.updateBuilder();
        updateBuilder.where().eq("title", song.getTitle());
        updateBuilder.updateColumnValue("isFavorate", false);
        int i = updateBuilder.update();
        if (i > 0) {
            res = true;
        }
        return res;
    }
    public List<Song> findPlaySongList() throws SQLException {
        return dao.queryForEq("isPlay",true);
    }
    //将正在播放的集合的歌曲的isplay都设置为true
    public void updatePlaySongList(List<Song> list) throws SQLException {
        List<Song> allSong=dao.queryForAll();
        //先将所有的歌曲的isplay都设置为false
        for (int i=0;i<allSong.size();i++){
            UpdateBuilder updateBuilder = dao.updateBuilder();
            updateBuilder.where().eq("title", allSong.get(i).getTitle());
            updateBuilder.updateColumnValue("isPlay", false);
            updateBuilder.update();
        }
        //再将正在播放的歌曲的isplay设置为true
        for (int i=0;i<list.size();i++){
            UpdateBuilder updateBuilder = dao.updateBuilder();
            updateBuilder.where().eq("title", list.get(i).getTitle());
            updateBuilder.updateColumnValue("isPlay", true);
            updateBuilder.update();
        }
    }
    //找到本地音乐表中的上次正在播放的歌曲
    public Song findNowPlaySong() throws SQLException {
        int i=dao.queryForEq("nowPlay",true).size();
        if (dao.queryForEq("nowPlay",true).size()>0){
            return dao.queryForEq("nowPlay",true).get(0);
        }else{
            return null;
        }
    }
    //更新本地音乐表中的的正在播放的歌曲
    public void updateNowPlaySong(Song song) throws SQLException {
        List<Song> allSong=dao.queryForAll();
        //先将所有的歌曲的nowPlay都设置为false
        for (int i=0;i<allSong.size();i++){
            UpdateBuilder updateBuilder = dao.updateBuilder();
            updateBuilder.where().eq("title", allSong.get(i).getTitle());
            updateBuilder.updateColumnValue("nowPlay", false);
            updateBuilder.update();
        }
        //再将正在播放的歌曲的nowPlay设置为true
        UpdateBuilder updateBuilder = dao.updateBuilder();
        updateBuilder.where().eq("title", song.getTitle());
        updateBuilder.updateColumnValue("nowPlay", true);
        updateBuilder.update();
    }
}
